package com.jc.order.util;

import com.jc.order.dto.EciCustomerQuotaApprovedDTO;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class ExcelToDtoParser {

    public List<EciCustomerQuotaApprovedDTO> parseExcelData(List<List<String>> excelRows) {
        List<EciCustomerQuotaApprovedDTO> result = new ArrayList<>();

        // 跳过表头行，从第二行开始解析（索引1）
        for (int i = 1; i < excelRows.size(); i++) {
            List<String> row = excelRows.get(i);

            EciCustomerQuotaApprovedDTO dto = new EciCustomerQuotaApprovedDTO();

            // 基本映射
            dto.setQuotaNo(row.get(0));         // A列: 限额编号
            dto.setCorpBuyerNo(row.get(3));      // D列: 买方/供应商PICCCODE
            dto.setPolicyNo(row.get(4));         // E列: 保单号
            dto.setPayMode(row.get(12));         // M列: 批复支付方式
            dto.setAuditDate(row.get(14));       // O列: 批复日期
            dto.setEffectDate(row.get(15));      // P列: 限额生效日
            dto.setLapseDate(row.get(16));       // Q列: 限额失效日
            dto.setAdCondition(row.get(24));     // Y列: 特别条件
            dto.setBillNote(row.get(25));        // Z列: 限额审批说明

            // 数值类型转换
            dto.setQuotaSum(parseBigDecimal(row.get(10)));  // K列: 批复额度
            dto.setPayTerm(parseInteger(row.get(13)));      // N列: 批复信用期限(天)
            dto.setRefuseRate(parseBigDecimal(row.get(18))); // T列: 拒收赔偿比例
            dto.setOtherRate(parseBigDecimal(row.get(19))); // U列: 其他商业风险赔偿比例
            dto.setLcRate(parseBigDecimal(row.get(20)));    // V列: 信用证商业风险赔偿比例
            dto.setPoliRate(parseBigDecimal(row.get(21)));  // W列: 政治风险赔偿比例

            // 逻辑字段计算
            dto.setIfLc("LC".equalsIgnoreCase(row.get(12)) ? 1 : 0); // 根据支付方式判断

            // 设置必要默认值（根据业务需求）
            dto.setApproveFlag(1);  // 假设已批准
            dto.setQuotaState("ACTIVE");  // 假设限额状态为激活

            result.add(dto);
        }

        return result;
    }

    private BigDecimal parseBigDecimal(String value) {
        if (value == null || value.trim().isEmpty()) {
            return null;
        }
        try {
            return new BigDecimal(value);
        } catch (NumberFormatException e) {
            // 记录日志或处理异常
            return BigDecimal.ZERO;
        }
    }

    private Integer parseInteger(String value) {
        if (value == null || value.trim().isEmpty()) {
            return null;
        }
        try {
            return Integer.parseInt(value);
        } catch (NumberFormatException e) {
            // 记录日志或处理异常
            return 0;
        }
    }
}